/**
 * @addtogroup bsc_gnss_server_funcs
 * bsc_gnss_server_funcs
 * @{
 */
/**
 * @file         bsc_gnss_server_funcs.h
 * @brief        定位服务函数集合
 * @note    
 * @author       Akee(ysk@hopechart.com,尤胜坤)
 *
 * @par          修改日志
 * <table>
 * <tr><th>Date        <th>Version               <th>Author                                    <th>Description
 * <tr><td>2020-11-25  <td>1.0                   <td>Akee(ysk@hopechart.com,尤胜坤)            <td>创建初始版本
 * <tr><td>2022-10-28  <td>1.1                   <td>Akee(ysk@hopechart.com,尤胜坤)            <td>文件名从gnss_server_funcs改为bsc_gnss_server_funcs，所有类型加前缀
 * @copyright    杭州鸿泉物联网技术股份有限公司
 */
#ifndef _BSC_GNSS_SERVER_FUNCS_H_
#define _BSC_GNSS_SERVER_FUNCS_H_

#include "ofc/ofc_types.h"
#include "mfc/mfc_serial_vir_bus.h"


#ifdef __cplusplus
extern "C" {
#endif

typedef struct IBsGnssServerFuncsTag IBsGnssServerFuncs;

/**
 * 写数据
 * @param sender: 发起者
 * @param data: 数据内容
 * @param data_size: 数据大小
 * @return >0: 写出去的数据大小; <0: 错误码，参考 @ref THccMidGnssErrorCode
 */
typedef Int32(*IBsGnssServerDoWrite)(IBsGnssServerFuncs *sender, const UInt8 *data, Int32 data_size);

/**
 * 电源控制
 * @param sender: 发起者
 * @param enable: True: 打开电源; False: 关闭电源
 * @return 参考 @ref THccMidGnssErrorCode
 */
typedef Int32(*IBsGnssServerDoPowerCtrl)(IBsGnssServerFuncs *sender, Bool enable);

/**
 * 波特率设置
 * @param sender: 发起者
 * @param baudrate: 波特率
 * @return 参考 @ref THccMidGnssErrorCode
 */
typedef Int32(*IBsGnssServerDoSetBaudrate)(IBsGnssServerFuncs *sender, UInt32 baudrate);

/**
 * 属性设置
 * @param sender: 发起者
 * @param attr_id:适配id
 * @param param: 参数值
 * @return 参考 @ref THccMidGnssErrorCode
 */
typedef Int32(*IBsGnssServerDoSetIntAttribute)(IBsGnssServerFuncs *sender, UInt32 attr_id, const UInt32 param);

/**
 * 属性获取
 * @param sender: 发起者
 * @param attr_id:适配id
 * @param param: 参数值
 * @return 参考 @ref THccMidGnssErrorCode
 */
typedef Int32(*IBsGnssServerDoGetIntAttribute)(IBsGnssServerFuncs *sender, UInt32 attr_id, UInt32 *param);

/**
 * 属性设置
 * @param sender: 发起者
 * @param attr_id:适配id
 * @param buf: 存放缓冲区
 * @param buf_len:缓冲区尺寸
 * @return 参考 @ref THccMidGnssErrorCode
 */
typedef Int32(*IBsGnssServerDoSetMemAttribute)(IBsGnssServerFuncs *sender, UInt32 attr_id, const UInt8 *buf, UInt16 buf_len);

/**
 * 属性获取
 * @param sender: 发起者
 * @param attr_id:适配id
 * @param buf: 存放缓冲区
 * @param buf_len:缓冲区尺寸
 * @return 参考 @ref THccMidGnssErrorCode
 */
typedef Int32(*IBsGnssServerDoGetMemAttribute)(IBsGnssServerFuncs *sender, UInt32 attr_id, UInt8 *buf, UInt16 buf_len);

/**
 * 输出日志
 * @param sender: 发起者
 * @param level:  日志输出级别 参考@ref TALogLevelEnum
 * @param tag:    日志标签
 * @param ticks:  时间戳
 * @param log:    日志内容
 * @param len:    日志内容长度
 * @return 实际输出的大小
 */
typedef Int32(*IBsGnssServerDoOutputLog)(IBsGnssServerFuncs *sender, UInt32 level, const Int8 *tag, UInt32 ticks, const Int8 *log, Int16 len);

/**
 * 定位服务函数集合
 */
struct IBsGnssServerFuncsTag
{
    Int32 size;                                     ///< 本结构体大小
    Int32 version;                                  ///< 接口版本号
    IBsGnssServerDoWrite DoWrite;                     ///< 写方法
    IBsGnssServerDoPowerCtrl DoPowerCtrl;             ///< 电源控制方法
    IBsGnssServerDoSetBaudrate DoSetBaudrate;         ///< 波特率设置方法
    IBsGnssServerDoSetIntAttribute DoSetIntAttribute; ///< 设置属性方法
    IBsGnssServerDoGetIntAttribute DoGetIntAttribute; ///< 获取属性方法
    IBsGnssServerDoSetMemAttribute DoSetMemAttribute; ///< 属性设置
    IBsGnssServerDoGetMemAttribute DoGetMemAttribute; ///< 属性获取
    IBsGnssServerDoOutputLog       DoOutputLog;       ///< 输出日志
};

/**
 * 写数据
 * @param self: 对象指针
 * @param data: 数据内容
 * @param data_size: 数据大小
 * @return >0: 写出去的数据大小; <0: 错误码，参考 @ref THccMidGnssErrorCode
 */
Int32 TBsGnssServerWrite(IBsGnssServerFuncs *self, const UInt8 *data, Int32 data_size);

/**
 * 电源控制
 * @param self: 对象指针
 * @param enable: True: 打开电源; False: 关闭电源
 * @return 参考 @ref THccMidGnssErrorCode
 */
Int32 TBsGnssServerPowerCtrl(IBsGnssServerFuncs *self, Bool enable);

/**
 * 波特率设置
 * @param self: 对象指针
 * @param baudrate: 波特率
 * @return 参考 @ref THccMidGnssErrorCode
 */
Int32 TBsGnssServerSetBaudrate(IBsGnssServerFuncs *self, UInt32 baudrate);

/**
 * 波特率获取
 * @param self: 对象指针
 * @return 参考 @ref THccMidGnssErrorCode
 */
Int32 TBsGnssServerGetBaudrate(IBsGnssServerFuncs *self, UInt32 *param);

/**
 * 属性设置
 * @param self: 对象指针
 * @param attr_id:适配id
 * @param param: 参数值
 * @return 参考 @ref THccMidGnssErrorCode
 */
Int32 TBsGnssServerSetIntAttribute(IBsGnssServerFuncs *self, UInt32 attr_id, const UInt32 param);

/**
 * 属性获取
 * @param self: 对象指针
 * @param attr_id:适配id
 * @param param: 参数值
 * @return 参考 @ref THccMidGnssErrorCode
 */
Int32 TBsGnssServerGetIntAttribute(IBsGnssServerFuncs *self, UInt32 attr_id, UInt32 *param);

/**
 * 属性设置
 * @param self: 对象指针
 * @param attr_id:适配id
 * @param buf: 存放缓冲区
 * @param buf_len:缓冲区尺寸
 * @return 参考 @ref THccMidGnssErrorCode
 */
Int32 TBsGnssServerSetMemAttribute(IBsGnssServerFuncs *self, UInt32 attr_id, const UInt8 *buf, UInt16 buf_len);

/**
 * 属性获取
 * @param self: 对象指针
 * @param attr_id:适配id
 * @param buf: 存放缓冲区
 * @param buf_len:缓冲区尺寸
 * @return 参考 @ref THccMidGnssErrorCode
 */
Int32 TBsGnssServerGetMemAttribute(IBsGnssServerFuncs *self, UInt32 attr_id, UInt8 *buf, UInt16 buf_len);

/**
 * 输出日志
 * @param sender: 发起者
 * @param level:  日志输出级别 参考@ref TALogLevelEnum
 * @param tag:    日志标签
 * @param ticks:  时间戳
 * @param log:    日志内容
 * @param len:    日志内容长度
 * @return        实际输出的大小
 */
Int32 TBsGnssServerDoOutputLog(IBsGnssServerFuncs *sender, UInt32 level, const Int8 *tag, UInt32 ticks, const Int8 *log, Int16 len);

#ifdef __cplusplus
} // extern "C" {
#endif

#endif

/**
 * @} 
 */
 
 
 
 
 
 
 
 
 
 
 
 


